Storage Engine
databaseを構成する要素のうち、実際にデータを格納するレイヤー
Database Engineともいう
databaseの特性と見られるうちのいくつかはstorage engineの実装によって決定する
supported types of data
CLOB (character large object), BLOB (binary large object) などのlarge objectsの扱いは製品によって大きく異なる
Oracleはlarge objectsを扱う前提の設計
その他ほとんどのDBMSは前提としていないのでHDDから読み書きするほうが速い可能性がある
同じようなdata typeも、製品ごとに違う名前がついていることがある
transaction support
supportしないstorage engineもそれなりにある
indexing
basic ideaは同じだがindexの実装は製品によって大きく異なることがある
locking types
同じoperationを行う場合でも、row lockとなるかtable lockとなるかは製品の実装次第
table scanに強い/弱いもこのレイヤーで決まる
各製品
そのDBMSがpluggable architectureかどうか、に依存
PostgreSQL
1つしか存在しない
MySQL
9つ存在するがデフォルトのInnoDBがメイン
もともとはMyISAMだったがトランザクションのサポートがなかったりした
設定変更できるが特殊な用途(オンメモリで使いたいとか)でなければほとんど変える必要はない
Oracle は、特別なユースケースを除くテーブルについては、このエンジンの使用を推奨します。(デフォルトでは、MySQL 5.6 の CREATE TABLE ステートメントは InnoDB テーブルを作成します。)
MongoDB
実質2択
3.2からデフォルトのstorage engineとなった
3.2より前はMMAPv1
In-Memory
Oracle
Oracle does not have a storage engine concept like Mysql does. It stores all tables in its own format in datafiles. What you can do is use different tablespaces and store them on different disks whose performance characteristics may be different.
SQLite
v4からは2つのbuilt-in storage engineを提供する
log-structured merge-tree (LSM) storage engine is used for persistent on-disk databases
in-memory binary tree storage engine is used for TEMP databases
Future versions of SQLite4 might add other built-in storage engines.
pluggable architectureを採用するので、ユーザーはガイドに従った実装のstorage engineであれば自由に利用できる
SQL Server
1つだけ?
参考